package br.com.tcc.automacao.usuario.negocio;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.com.tcc.automacao.permissao.negocio.Permissao;
import br.com.tcc.automacao.util.HibernateUtil;

public class UsuarioNegocioWebService {
	
	private static UsuarioNegocioWebService instance;
	
	public static UsuarioNegocioWebService getInstance(){
		if(instance == null){
			instance = new UsuarioNegocioWebService();
		}
		return instance;
	}
	
    public String  adicionarUsuario(Usuario usuario) {
    	String retorno = HibernateUtil.incluirUsuario(usuario);
	return retorno;
    }
    
    public String atualizarUsuario(Usuario usuario) {
	HibernateUtil.atualizarUsuario(usuario);
	
	return "sucesso";

    }
    
    public Usuario consultarUsuario(String login) {
	
	DetachedCriteria dc = DetachedCriteria.forClass(Usuario.class);
	
	dc.add(Restrictions.eq("login", login));
	
	return (Usuario) HibernateUtil.consultarUnicoResult(dc);
    }

	public Usuario consultarUsuario(Long idLong) {
		return (Usuario) HibernateUtil.consultar(Usuario.class, idLong);

	}
	
	public static Usuario obterSessaoUsuarioLogado(HttpServletRequest request){
		Usuario usuario = (Usuario) request.getSession().getAttribute("usuarioLogado");
		return usuario;
	}
	
	/*public static boolean possuiPermissao(List<Permissao> permissoes, String permissaoString){
		
		for (Permissao permissao : permissoes) {
			if(permissao.getPermissao().equals(permissaoString)){
				return true;
			}
		}
		
		return false;
	}*/

	public List<Usuario> listarUsuarios() {
		DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Usuario.class);
		detachedCriteria.addOrder(Order.asc("nome"));
		detachedCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
		return (List<Usuario>) HibernateUtil.listar(detachedCriteria);
	}

	public String remover(Usuario usuario) {
		HibernateUtil.remover(usuario);
		
		return "sucesso";
	}

}
